package string;

public class StringDemo {
    public static void main(String[] args) {
        String s=new String("hello");//创建了两个对象
        String s1="hello";//复用常量池中的字面量对象地址
        System.out.println(s==s1);//false,==比较的是地址是否相同
        //在实际应用中，String比较相等一般都是比较字符串的内容是否相同
        //因此我们需要使用equals()方法来比较两个字符串内容是否相同
        System.out.println(s.equals(s1));//true







        /*
        String s1="123abc";//常量池还没有，因此创建该字符串对象，并存入常量池中
        String s2="123abc";//常量池中已经有了，直接复用了
        String s3="123abc";//常量池中已经有了，直接复用了
        //引用类型 == 比较的是地址是否相同----这是规定
        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//true
        System.out.println(s2==s3);//true
        s1=s1+"!";//创建新的字符串对象（"123abc!"），并将地址赋值给S1
        System.out.println(s1==s2);//false
        /*
        String s1="123abc";//堆中创建123abc字符量对象，并缓存到常量池中
        String s2="123"+"abc";
        System.out.println(s1==s2);//true
        编译器在编译时，若发现是两个字面量相连，则会直接连接好并将结果保存起来
        "123"+"abc"会被编译为"123abc"
         */

    }
}
